package iface.aplicativo.apresentacao.controle;

import iface.aplicativo.excecao.MensagemException;
import iface.aplicativo.negocio.aps.ManterModelosAPS;
import iface.aplicativo.negocio.entidade.Fabricante;
import iface.aplicativo.negocio.entidade.Modelo;
import iface.aplicativo.util.BeanAbstrato;
import iface.arquitetura.utilitario.ListaTO;

import java.io.Serializable;
import java.util.Collection;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;

@ManagedBean
@SessionScoped
public class ManterModelosBean extends BeanAbstrato implements Serializable {

	private static final long serialVersionUID = 6929316813623705850L;
	private Modelo modelo;
	private Modelo modeloAux;

	@ManagedProperty(value = "#{manterModelosAPS}")
	private ManterModelosAPS service;

	public void setService(ManterModelosAPS service) {
		this.service = service;
	}

	public Collection<Modelo> getTodosModelo() throws Exception {
		return this.service.consultarTodosModelo();
	}

	public Collection<ListaTO> getTodosFabricantes() throws Exception {
		return this.service.consultarTodosFabricantes();
	}

	public void salvarModelo() throws Exception {

		try {
			String msg = this.service.salvarModelo(this.getModelo());
			limparCampos();

			this.setMensagem(msg, MSG_TIPO_INFORMACAO, "");
		} catch (final MensagemException e) {
			this.setMensagem(e.getMessage(), MSG_TIPO_AVISO, "");
		} catch (final Exception e) {
			this.setMensagem(e.getMessage(), MSG_TIPO_ERRO, "");
		}
	}

	public void excluirModelo() throws Exception {

		try {
			String msg = this.service.excluirModelo(this.getModeloAux());
			limparCampos();

			this.setMensagem(msg, MSG_TIPO_INFORMACAO, "");
		} catch (final MensagemException e) {
			this.setMensagem(e.getMessage(), MSG_TIPO_AVISO, "");
		} catch (final Exception e) {
			this.setMensagem(e.getMessage(), MSG_TIPO_ERRO, "");
		}
	}

	public void limparCampos() {
		modelo = null;
	}

	public void setModelo(Modelo modelo) {
		this.modelo = modelo;
	}

	public Modelo getModelo() {
		if (modelo == null) {
			modelo = new Modelo();
			modelo.setFabricante(new Fabricante());
		}
		return modelo;
	}

	public Modelo getModeloAux() {
		if (modeloAux == null) {
			modeloAux = new Modelo();
			modeloAux.setFabricante(new Fabricante());
		}
		return modeloAux;
	}

	public void setModeloAux(Modelo modeloAux) {
		this.modeloAux = modeloAux;
	}

}
